// Copyright (c) Appeon. All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. 
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.

using System;
using System.Collections.Generic;

namespace SnapObjects.Data
{
    public interface IPocoProperty : IPropertyMeta, IUpdatableProperty
    {
        string ColumnName { get; }

        string ColumnAlias { get; }

        int ColumnOrder { get; }

        PropertyAttributeInfo Attribute { get; }

        bool IsNotMapped { get; }

        bool IsEmbedded { get; }

        bool IsForeign { get; }

        bool IsCompute { get; }

        bool IsContainerType { get; }

        bool IsJsonIgnore { get; }

        bool IsXmlIgnore { get; } //Not best practices, wait for optimization

        Type EmbeddedType { get; }

        bool IsCascadeCreate { get; }

        bool IsCascadeDelete { get; }

        bool HasSetValueOperation { get; }

        ISqlColumn SqlColumn { get; }

        ISqlCompute SqlCompute { get; }

        ISqlEmbedded SqlEmbedded { get; }

        IModelEmbedded ModelEmbedded { get; }

        IReadOnlyList<ISetValue> SetValueOperations { get; }
    }
}
